import './base_provider.dart';
import '../models/user_model.dart';
import '../models/response/base_response.dart';

/// 用户数据提供者
/// 负责处理用户相关的API请求
class UserProvider extends BaseProvider {
  
  /// 获取当前用户信息
  Future<BaseResponse<UserModel>> getCurrentUser() async {
    return getRequest<UserModel>(
      '/users/me', // 获取当前用户信息的API端点
      (json) => UserModel.fromJson(json as Map<String, dynamic>? ?? {}),
    );
  }

  /// 更新用户信息
  Future<BaseResponse<UserModel>> updateUserProfile(
    String userId,
    Map<String, dynamic> userData, // 通常包含 name, bio, avatarUrl 等
  ) async {
    // 注意：这里使用 PUT 或 PATCH 方法更合适
    // 假设使用 PUT
    return handleResponse<UserModel>(
      () => put('/users/$userId', userData), // 更新用户信息的API端点
      (json) => UserModel.fromJson(json as Map<String, dynamic>? ?? {}),
    );
  }
  
  /// 根据用户ID获取用户信息 (管理员权限)
  Future<BaseResponse<UserModel>> getUserById(String userId) async {
    return getRequest<UserModel>(
      '/users/$userId', // 根据ID获取用户信息的API端点
      (json) => UserModel.fromJson(json as Map<String, dynamic>? ?? {}),
    );
  }
  
  /// 获取用户列表 (管理员权限，带分页)
  Future<BaseResponse<List<UserModel>>> getUserList({int page = 1, int limit = 10}) async {
    // 假设返回的是包含用户列表的 BaseResponse
    return handleResponse<List<UserModel>>(
      () => get(
        '/users', 
        query: {'page': page.toString(), 'limit': limit.toString()},
      ),
      (json) { // fromJson 函数处理列表数据
        if (json is List) {
          return json.map((item) => UserModel.fromJson(item as Map<String, dynamic>? ?? {})).toList();
        } else if (json is Map<String, dynamic> && json.containsKey('items')) {
          // 兼容后端可能将列表包装在 'items' 字段内的情况
          final items = json['items'] as List?;
          return items?.map((item) => UserModel.fromJson(item as Map<String, dynamic>? ?? {})).toList() ?? [];
        }
        return []; // 返回空列表如果格式不匹配
      },
    );
  }
} 